package org.pupil.list.reverserList;

import org.pupil.list.IList;
import org.pupil.list.ListNode;

/**
 * @Description: 反转链表
 * @Author: pupil
 * @Date: 2024/07/29 下午 2:28
 */
public class ReverseList {

    /**
     * 1 -> 2 -> 3 -> null
     * 1. null <- 1  2 -> 3 -> null
     * 2. null <- 1 <- 2  3 -> null
     * 3. null <- 1 <- 2 <- 3
     */
    public static ListNode reverseList(ListNode head){
        ListNode pre  = null; // 标记上一节点
        ListNode next = null; // 标记下一节点

        while (head != null){
            // 记录原顺序的下一节点
            next = head.next;
            // 反转顺序
            head.next = pre;
            // 指向新的上一节点，跟着头节点变
            pre = head;
            // 更新头节点
            head = next;
        }
        return pre;
    }


    public static void main(String[] args) {
        // 原链表
        ListNode listNode = IList.get(new int[]{1, 2, 3});
        IList.ergodic(listNode);
        System.out.println();
        System.out.println("----------------------------");
        //反转后的链表
        listNode = reverseList(listNode);
        IList.ergodic(listNode);
    }
}
